package com.nondo.dean.auth.provider;

import com.nondo.dean.auth.common.bean.MenuItem;
import com.nondo.dean.auth.common.bean.MenuRoleItem;
import com.nondo.dean.auth.common.bean.TreeBean;
import com.nondo.dean.auth.domain.Menu;
import com.nondo.dean.common.web.Page;
import com.nondo.dean.common.web.Query;
import com.nondo.dean.common.web.View;

import java.util.List;

/**
 * 菜单注册
 */
public interface MenuManager {


    /**
     * 菜单注册
     *
     * @param menuItem 菜单项
     * @return 返回注册成功或失败的信息
     */
    View<String> requestMenuRegister(MenuItem menuItem);

    /**
     * 菜单获取
     *
     * @param menuId 菜单ID
     * @return 返回注册成功或失败的信息
     */
    View<Menu> requestMenuOne(Long menuId);

    /**
     * 菜单删除
     *
     * @param menuId 菜单ID
     * @return 返回注册成功或失败的信息
     */
    View<String> requestMenuDelete(Long menuId);

    /**
     * 角色绑定菜单
     *
     * @param menuItem 菜单项
     * @return 返回注册成功或失败的信息
     */
    View<Void> requestRoleBindMenuRegister(MenuRoleItem menuItem);

    /**
     * 角色解绑菜单
     *
     * @param menuItem 菜单项
     * @return 返回注册成功或失败的信息
     */
    View<Void> requestRoleUnBindMenuRegister(MenuRoleItem menuItem);

    /**
     * 批量菜单注册
     *
     * @param menus map key:value
     *              {username:"",password:""}
     * @return 返回注册成功或失败的信息
     */
    View<Void> requestMultMenuRegister(List<MenuItem> menus);

    /**
     * 菜单树状结构
     *
     * @return 返回注册成功或失败的信息
     */
    View<List<TreeBean>> requestMenuTreeOfAll();

    /**
     * 菜单分页请求
     *
     * @param item 部门信息
     * @return 消息提示
     */
    View<Page<Menu>> requestQuery(Query<MenuItem> item);

    /**
     * 菜单树状结构
     *
     * @return 返回注册成功或失败的信息
     */
    View<List<TreeBean>> requestMenuTreeOfUser();

}
